<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>函数返回值(function return)</title>
  <!-- 
  在 JavaScript 中，函数的返回值是函数执行后输出的结果。

  1. 返回值的基本用法
  - 描述：使用  `return`  语句可以将值返回给调用函数的地方。
    function add(a, b) {
        return a + b;
    }
    let result = add(2, 3); // result 的值为 5

  2. 没有返回值
  - 描述：如果函数没有  `return`  语句，或者  `return`  后没有指定值，则默认返回  `undefined` 。
    function sayHello() {
        console.log("Hello!");
    }
    let greeting = sayHello(); // greeting 的值为 undefined

  3. 返回多个值
  - 描述：JavaScript 函数只能返回一个值，但可以通过数组或对象的方式返回多个值。
    function getCoordinates() {
        return [10, 20]; // 返回一个数组
    }
    let coords = getCoordinates(); // coords 的值为 [10, 20]

  4. 使用对象返回多个值
  - 描述：使用对象返回多个值，可以通过属性名访问返回的值。
    function getUser() {
        return {
            name: "张三",
            age: 25
        };
    }
    let user = getUser();
    console.log(user.name); // 输出 "张三"

  5. 早期返回
  - 描述：可以在函数中使用  `return`  提前结束函数执行。
    function checkAge(age) {
        if (age < 18) {
            return "未成年人";
        }
        return "成年人";
    }
    console.log(checkAge(15)); // 输出 "未成年人"

  6. 返回值的类型
  - 描述：返回值可以是任意数据类型，包括基本类型（如数字、字符串、布尔值）和引用类型（如对象、数组、函数）。
    function getNumber() {
        return 42; // 返回数字
    }

    function getString() {
        return "你好"; // 返回字符串
    }

    function getBoolean() {
        return true; // 返回布尔值
    }

  总结表
| 特性               | 描述                                   | 示例                                    |
|--------------------|----------------------------------------|-----------------------------------------|
| 返回值的基本用法   | 使用  `return`  返回值                   |  `return a + b;`                         |
| 没有返回值         | 默认返回  `undefined`                    |  `console.log(sayHello());`              |
| 返回多个值         | 通过数组或对象返回多个值                 |  `return [x, y];`  或  `return {x, y};`   |
| 早期返回           | 使用  `return`  提前结束函数执行        |  `if (age < 18) return "未成年人";`      |
| 返回值的类型       | 返回任意数据类型                        |  `return "文本";`  或  `return 100;`      |

  -->
</head>
<body>

  <script>
    // 1.函数返回值
    function add(a, b) {
        return a + b;
    }

    let result = add(1, 2);
    console.log("1.函数返回值", result); // 输出 3

    // 2.没有返回值 - 默认返回 undefined
    function sayHello(name) {
      console.log(`2.没有返回值 Hello, World!", ${name}`);
    }
    let greeting = sayHello(); // greeting 的值为 undefined
    console.log("2.没有返回值", greeting); // 输出 undefined

    // 3.返回值注意事项
    // 3.1 注意事项
    function foo1() {
      console.log("3.1 注意事项 foo1");
      return
    }
    let foo1Result = foo1();
    console.log("3.1返回值类型", foo1Result); // 输出 undefined

    // 3.2 注意事项
    function foo2() {
      console.log("3.2 注意事项 foo1");
      return ;
      console.log("3.2 注意事项 foo2");
      console.log("3.2 注意事项 foo3");
    }
    
    let foo2Result = foo2();
    console.log("3.2返回值类型", foo2Result); // 输出 undefined

    // 4. return 提前结束函数执行
    function checkAge(age) {
      if (age < 18) return "未成年人";
      return "成年人";
    }
    let checkAgeResult = checkAge(16);
    console.log("4. return 提前结束函数执行", checkAgeResult); // 输出 "未成年人"

    // 5. 多个返回值
    function getScore() {
      let score = 100;
      let level = "A";
      return [score, level];
    }
    let [score, level] = getScore();
    console.log("5. 多个返回值", score, level); // 输出 100 A

    // 6. 返回值类型
    function foo3() {
      return 123;
    }
    let foo3Result = foo3();
    console.log("6. 返回值类型", foo3Result); // 输出 123

    function foo4() {
      return "hello";
    }
    let foo4Result = foo4();

    console.log("6. 返回值类型", foo4Result); // 输出 hello

    function foo5() {
      return true;
    }
    let foo5Result = foo5();
    console.log("6. 返回值类型", foo5Result); // 输出 true

    function foo6() {
      return [1, 2, 3];
    }

    let foo6Result = foo6();
    console.log("6. 返回值类型", foo6Result); // 输出 [1, 2, 3]

    function foo7() {
      return { name: "张三", age: 18 };
    }
    let foo7Result = foo7();
    console.log("6. 返回值类型", foo7Result); // 输出 { name: "张三", age: 18 }

  </script>
  
</body>
</html>

